﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Markup;
using UIT.Controls.Containers;
using UIT.Events.Keyboard;
using nAcl.UIT;
using UIT.VisualStates;

namespace UIT.Controls
{
    public interface IControl :
        System.ComponentModel.INotifyPropertyChanged,
        IBindingContainer,
        IDataContext,
        System.ComponentModel.ISupportInitializeNotification,
        IDisposable,
        IContainable<IContainer>,
        IContainer<IControl, KeyCommandBinding>,
        IContainer<IControl, VisualState>,
        ISupportLifeCycle,
        IAclDependent
    {
        string Id { get; set; }
        bool IsContainer { get; }
        bool IsDrawable { get; }
        bool IsEnabled { get; set; }
        bool IsVisible { get; set; }
        ControlType Type { get; }
        string StyleKey { get; set; }
        int? TabIndex { get; set; }

        object Metadata { get; set; }

        Events.Events Events { get; }
        IDisposableObservableCollection<IControl, KeyCommandBinding> KeyCommandBindings { get; }

        IDisposableObservableCollection<IControl, VisualState> VisualStates { get; }

        IUitContext Context { get; }
    }
}
